Прочитать на английском

Поделиться через


Критические изменения в Razor после .NET 8.0.100 до .NET 9.0.100

В этом документе перечислены известные критические изменения в Razor после общего выпуска .NET 8 (пакет SDK для .NET версии 8.0.100) до общего выпуска .NET 9.0.100.

@ Синтаксический анализ идентификаторов был унифицирован

Представлено в VS 17.10 и .NET 8.0.300

В https://github.com/dotnet/razor/pull/10232этом случае мы отрегулировали поведение анализа идентификатора после @ более согласованного анализа в Razor. Это привело к нескольким сценариям, которые имеют другое поведение, перечисленные ниже.

Подробные интерполированные строки

Строки формы @$"ticket-{i}.png" больше не распознаются. Это будет исправлено в более позднем выпуске, изменив его на новый лексер; до тех пор используйте $@ для обхода проблемы.

Директивы препроцессора C#, за которыми следует HTML, не анализируются правильно

  1. Директива препроцессора непосредственно перед HTML. Этот вкус выглядит примерно так:
razor
@{
    #region R
    <h3>@ViewData["Title"]</h3>
    #endregion
}
  1. Существует допустимый C# между директивой препроцессора и html, но он не имеет символа, который сообщает средство синтаксического анализа завершить синтаксический анализ до HTML. Это вариант 1 и может возникать с такими switch инструкциями:
razor
@{
    switch (true)
    {
        #region R
        case true:
            <div>@(1 + 1)</div>
            break;
    }
}

Ранее директивы препроцессора C#, за которыми следует HTML, иногда будут анализироваться правильно, если в нем был @ переход HTML. Теперь он последовательно анализируется неправильно. Это будет разрешено в более позднем выпуске, изменив его на новый лексер. До тех пор существуют доступные обходные пути для компиляции.

Окружите HTML в блоке

HTML можно окружить фигурными скобками.

razor
@{
    #if  DEBUG
    {
        <h3>@ViewData["Title"]</h3>
    }
    #endif
}

Добавление точки с запятой в директиву

Директивы, такие как #region и #endregion позволяют поместить точку с запятой после директивы. Это позволит эффективно обойти проблему.

razor
@{
    #region R ;
    <h3>@ViewData["Title"]</h3>
    #endregion
}

Добавьте точку с запятой после директивы

Директивы, такие как #if и #endif не разрешают запятую после условия директивы, но его можно поместить в следующую строку, чтобы сделать пустую инструкцию.

razor
@{
    #if  DEBUG
    ;
    <h3>@ViewData["Title"]</h3>
    #endif
}